<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>爬楼梯</title>
  </head>
  <body>
    <script>
      // 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
      // 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢？
      // 注意：给定 n 是一个正整数。

      // 示例 1：
      // 输入： 2
      // 输出： 2
      // 解释： 有两种方法可以爬到楼顶。
      // 1.  1 阶 + 1 阶
      // 2.  2 阶

      // 来源：力扣（LeetCode）
      // 链接：https://leetcode-cn.com/problems/climbing-stairs
      // 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

      // 分析：题目的本质是斐波那契数列（f(x)=f(x−1)+f(x−2)）
      var climbStairs = function (n) {
        let a = 2,
          b = 1,
          g = 0;
        if (n === 1 || n === 2) {
          return n === 1 ? 1 : 2;
        }
        for (let i = 3; i <= n; i++) {
          g = a + b;
          b = a;
          a = g;
        }
        return g;
      };

      let x = climbStairs(2);
      console.log(x);
    </script>
  </body>
</html>
